home *** CD-ROM | disk | FTP | other *** search
- /*
- Lastx v1.0 Written by Ryan Wyler (ryanw@goodnet.com)
-
-
- Decription:
-
- A 'last' type utility for Solaris which displays the full information
- for the users.
-
- Why:
-
- The version of Solaris which I run here (Solaris 2.5 Sparc) does not
- log the whole IP of the users in the file that 'last' uses to display the
- information (/var/adm/tmpx). But it does store the full IP in the
- /var/adm/wtmpx file. So this program helps me to findout where people are
- logging in from A LOT easier.
-
- Disclamer:
-
- If this breaks something.. don't come crying to me.. I'm not
- responsable for nutin..
-
-
- Distibution:
-
- Feel Free to distribute this to whom ever can make use of this util.
- It has helped me out a ton. :)
-
- I have not added in any comments due to lack of time. Sorry.
- I welcome comments/Suggestions to make it better if you care to send
- any. Otherwise, use at will.
-
- */
-
- #include <stdio.h>
- #include <utmpx.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #define WTMP "/var/adm/wtmpx"
- #define UTMP "/var/adm/utmpx"
-
- void nl()
- {
- printf("\n");
- }
-
- void main(argc,argv)
- int argc;
- char *argv[];
- {
- struct utmpx utmp_ent;
- char *date="",*ch,user;
- int f,count=0,all=0,debug=0,x=1,success=0,other_file=0,help=0,done=0;
-
- nl();
- printf(" Lastx v1.0 Written by Ryan Wyler (ryanw@goodnet.com)");
- nl();
- nl();
- if(argc>1)
- if(strcmp(argv[1],"-h")==0)
- {
- help=1;
- done=1;
- }
- if((argc > 1)&&(!done))
- {
- do
- {
- if(strcmp(argv[x],"-a")==0)
- all=1;
- else
- if(strcmp(argv[x],"-d")==0)
- debug=1;
- else
- if(strcmp(argv[x],"-f")==0)
- {
- other_file=1;
- if(argc>x+1)
- {
- x++;
- if((f=open(argv[x],O_RDWR))>=0)
- success=1;
- else
- printf(" Error: Check filename/path for '%s'\n\n",argv[x]);
- }
- else
- printf(" Error: -f specified, but no filename followed -f\n\nexiting...\n");
- }
- else
- strcpy(&user,argv[x]);
- x++;
- }
- while(x < argc);
- }
- if((argc > 1)&&(!done))
- {
- if(all==1)
- {
- if(other_file==0)
- if((f=open(WTMP,O_RDWR))>=0)
- success=1;
- else
- printf(" Error: Check filename/path: %s\n\n",WTMP);
- if(success==1)
- {
- while(read(f,&utmp_ent,sizeof(utmp_ent)))
- if(strncmp(utmp_ent.ut_user,".",1)!=0)
- {
- if(count==0)
- printf(" User IP Address (to see time specify specific user)\n");
- printf(" %s %s\n",utmp_ent.ut_user,utmp_ent.ut_host);
- count++;
- }
- nl();
- printf("There were %i records listed",count);
- nl();
- close(f);
- }
- }
- else
- {
- if(debug==1)
- {
- if(other_file==0)
- if((f=open(WTMP,O_RDWR))>=0)
- success=1;
- else
- printf(" Error: Check filename/path: %s\n\n",WTMP);
- if(success==1)
- {
- while(read(f,&utmp_ent,sizeof(utmp_ent)))
- {
- if(count==0)
- printf(" User IP Address (to see time specify specific user)\n");
- printf(" %s %s\n",utmp_ent.ut_user,utmp_ent.ut_host);
- count++;
- }
- nl();
- printf("There were %i records listed",count);
- nl();
- close(f);
- }
- }
- else
- {
- if(other_file==0)
- if((f=open(WTMP,O_RDWR))>=0)
- success=1;
- else
- printf(" Error: Check filename/path: %s\n\n",WTMP);
- if(success==1)
- {
- while(read(f,&utmp_ent,sizeof(utmp_ent)))
- if(!strcmp(utmp_ent.ut_name, &user))
- {
- if(count==0)
- printf(" User IP Address Time\n");
- date = ctime(&utmp_ent.ut_xtime);
- date[strlen(date)-1] = '\0';
- printf(" %s %s %s\n",utmp_ent.ut_user,utmp_ent.ut_host,date);
- count++;
- }
- nl();
- printf("There were %i records listed",count);
- nl();
- close(f);
- }
- }
- }
- }
- else
- {
- printf(" Usage: %s <-h | -a | -d | [username]> <-f [filename]>",argv[0]);
- nl();
- printf(" Options: -a Display all users");
- nl();
- printf(" -d Display all Entrys");
- nl();
- printf(" user Displays entries for only that user");
- nl();
- printf(" -f Specify a specific wtmpx file to use");
- nl();
- printf(" -h Extended help (examples) %i",help);
- nl();
- nl();
- if(help==1)
- {
- printf(" Examples:");
- nl();
- printf(" %s ryanw",argv[0]);
- nl();
- printf(" Shows all logins for ryanw");
- nl();
- nl();
- printf(" %s -a",argv[0]);
- nl();
- printf(" Shows all records in wtmpx file");
- nl();
- nl();
- printf(" %s -d",argv[0]);
- nl();
- printf(" Shows even MORE records in wtmpx file");
- nl();
- nl();
- printf(" %s -f /var/adm/backup/wtmp.1 ryanw",argv[0]);
- nl();
- printf(" Shows all logins of user ryanw in file /var/adm/backup/wtmp.1");
- nl();
- nl();
- printf(" %s -a -f <filename>",argv[0]);
- nl();
- printf(" Shows all records in <filename>");
- nl();
- }
- }
- exit(0);
- }
- /* www.hack.co.za [2000]*/